﻿using System;
using System.Windows.Forms;
using DevExpress.XtraBars;
using System.Configuration;
using DevExpress.XtraEditors;
using System.Data;
using DevExpress.XtraBars.Ribbon.ViewInfo;
using System.Drawing;
using UniMana.Data;
using UniMana.Utils.Helper;
using UniMana.Win.Personnel;
using UniMana.Win.Training;
using UniMana.Win.Systems;
using UniMana.Win.Tools;
using UniMana.Utils.Configs;
using UniMana.Win.Catalogue;
using DevExpress.XtraBars.Ribbon;
using UniMana.Win.Tool;
using UniMana.Win.Leadership;
using DevExpress.XtraTab;

namespace UniMana.Win
{
    public partial class FrmMain : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        public FrmMain()
        {
            InitializeComponent();
            bsiUser.Caption = "Người dùng : " + SysGlobalVar.g_sta_sysUserLogin.Properties.UserName;
            this.ChangeSkin();
            R.Inital();
            SysUtils.SetRuleControl(this.Controls, this.Name);
            SysGlobalVar.g_dtContainControl = new DataTable();
            GetControlsInForm(this);
            #region [Tab ko được đóng]
            this.TabShowForm(bbiSysOverView, new FrmIntroduction());
            #endregion

            //this.AddChatForm(new UniMana.Client.FrmMain());
            this.DisapeareNoneControl();
        }

        #region [Form - Events]

        //Đóng Tab hiện tại
        private void xtbMdiChildFormManager_CloseButtonClick(object sender, EventArgs e)
        {
            try
            {
                ((XtraForm)(xtcMain.SelectedTabPage.Controls[0])).Close();
                ((XtraForm)(xtcMain.SelectedTabPage.Controls[0])).Dispose();
            }
            catch { }
            xtcMain.TabPages.Remove(xtcMain.SelectedTabPage);
        }

        //Đồng hồ
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                DBMain data = new DBMain();
                DateTime d = data.m_DCSave.GetSystemDate();
                string hh = d.Hour >= 10 ? (d.Hour.ToString()) : ("0" + d.Hour);
                string mm = d.Minute >= 10 ? (d.Minute.ToString()) : ("0" + d.Minute);
                string ss = d.Second >= 10 ? (d.Second.ToString()) : ("0" + d.Second);
                bbiTime.Caption = hh + ":" + mm + ":" + ss + "  Ngày " + d.Day + ", tháng " + d.Month + " ,năm " + d.Year;
            }
            catch { }
        }

        //Load Form
        private void FrmTrainingManager_Load(object sender, EventArgs e)
        {
            //xtcMain.Visible = false;
            //xtcMain.TabPages.CollectionChanged += (sender1, e1) =>
            //{
            //    if (xtcMain.TabPages.Count <= 0)
            //        xtcMain.Visible = false;
            //    else xtcMain.Visible = true;
            //};
        }


        //Chuyển mouse pointer thành dạng Hand
        private void ribbon_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                RibbonHitInfo hitInfo = ribbon.CalcHitInfo(e.Location);

                if (hitInfo.InItem == false || hitInfo.Item == null)
                {
                    Cursor = Cursors.Default;
                    return;
                }

                //if (hitInfo.Item == barButtonItem1.Links[0])
                Cursor = Cursors.Hand;
                //else
                //    Cursor = Cursors.Hand;
            }
            catch { }
        }
        #endregion
        
        #region [Utils]
        private void ChangeSkin()
        {


            //đăng kí 2 bonus skin
            DevExpress.UserSkins.BonusSkins.Register();
            DevExpress.UserSkins.OfficeSkins.Register();
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(typeof(DevExpress.UserSkins.BonusSkins).Assembly);
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(typeof(DevExpress.UserSkins.OfficeSkins).Assembly);
            //kích hoạt thay đổi skin
            DevExpress.Skins.SkinManager.EnableFormSkins();
            DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle(ConfigurationManager.AppSettings["SkinName"]);
            beiUI.EditValue = ConfigurationManager.AppSettings["SkinName"];
            beiChangeFont.EditValue = ConfigurationManager.AppSettings["FontName"];
            beiFontSize.EditValue = ConfigurationManager.AppSettings["FontSize"];


        }

        public void GetControlsInForm(dynamic frm)
        {
            if (SysGlobalVar.g_dtContainControl == null || SysGlobalVar.g_dtContainControl.Columns.Count == 0)
            {

                SysGlobalVar.g_dtContainControl.Columns.Add("RuleID");
                SysGlobalVar.g_dtContainControl.Columns.Add("RuleNameVi");
                SysGlobalVar.g_dtContainControl.Columns.Add("ParentID");
                SysGlobalVar.g_dtContainControl.Columns.Add("Level");

            }
            SysUtils.GetControl(frm.Controls, this.Name, SysGlobalVar.g_dtContainControl);
        }

        #region Đặt lại icon cho form như hình tren nút
        Bitmap bm;
        private void findSetIcon(Form f, BarButtonItem bbi)
        {
            bm = null;
            if (bbi.LargeImageIndex != -1)
            {
                bm = new Bitmap(this.img_32x32.Images[bbi.LargeImageIndex]);
            }
            else
            {
                if (bbi.ImageIndex != -1)
                {
                    bm = new Bitmap(this.img_16x16.Images[bbi.ImageIndex]);
                }
            }
            if (bm != null)
            {
                bm.MakeTransparent(Color.White);
                System.IntPtr icH = bm.GetHicon();
                Icon ico = Icon.FromHandle(icH);
                f.Icon = ico;
            }
        }
        #endregion

        public void TabShowForm(object sender, Form frm, bool showAsDialog = false)
        {
            Cursor = Cursors.AppStarting;
            this.findSetIcon(frm, (BarButtonItem)sender);
            if (showAsDialog == false)
            {
                TabShowFrm.ShowTabbedMdi(frm, xtcMain);
            }
            else
            {
                frm.ShowDialog();
            }
            Cursor = Cursors.Default;
        }

        /// <summary>
        /// Phân quyền nút
        /// </summary>
        public void DisapeareNoneControl()
        {
            //int n1=0;
            for (int i = 0; i < ribbon.Pages.Count; i++)
            {
                RibbonPage ribbonPage = ribbon.Pages[i];
                int countPage = 0;
                for (int j = 0; j < ribbonPage.Groups.Count; j++)
                {
                    int countBarButton = 0;
                    for (int k = 0; k < ribbonPage.Groups[j].ItemLinks.Count; k++)
                    {
                        if (ribbonPage.Groups[j].ItemLinks[k].Links[0].Item.Visibility == BarItemVisibility.Never)
                        {
                            countBarButton++;
                        }
                        int count = 0;

                        if (ribbonPage.Groups[j].ItemLinks[k].Item.GetType().Name == "BarLinkContainerItem")
                        {
                            BarLinkContainerItem bliContainerItem = (BarLinkContainerItem)ribbonPage.Groups[j].ItemLinks[k].Item;
                            for (int z = 0; z < bliContainerItem.ItemLinks.Count; z++)
                            {
                                if (bliContainerItem.ItemLinks[z].Item.Visibility == BarItemVisibility.Never)
                                {
                                    count++;
                                }
                            }
                            if (count == bliContainerItem.ItemLinks.Count)
                            {
                                ribbonPage.Groups[j].ItemLinks[k].Item.Visibility = BarItemVisibility.Never;
                                countPage++;
                            }
                        }
                    }

                    if (ribbonPage.Groups[j].ItemLinks.Count == countBarButton)
                    {
                        ribbonPage.Groups[j].Visible = false;
                        countPage++;
                    }
                }
                if (countPage == ribbonPage.Groups.Count)
                {
                    ribbon.Pages[i].Visible = false;
                }


            }
        }
        #endregion

        #region [Top ToolBar]
        //Thông tin người dùng (Đổi mật khẩu)
        private void bsiUser_ItemClick(object sender, ItemClickEventArgs e)
        {
            FrmUserList_SubInfo f = new FrmUserList_SubInfo();
            f.ShowDialog();
        }
        #endregion

        #region [Hệ thống]
        //Danh sách người dùng
        private void bbiListUser_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiListUser, new FrmUserManager());
        }

        //Danh sách nhóm người dùng
        private void bbiListGroup_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiListGroup, new FrmGroupMananger());
        }

        //Nhật ký hệ thống
        private void barButtonItem23_ItemClick(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Sao lưu dữ liệu
        private void bbiBackup_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiBackup, new FrmBackupDatabase(), true);
        }

        //Phục hồi dữ liệu
        private void bbiRestore_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiRestore, new FrmRestoreDatabase(), true);
        }
        
        //Danh mục
        private void bbiCategory_ItemClick(object sender, ItemClickEventArgs e)
        {
            TabShowFrm.ShowTabbedMdi(new FrmCategories(), xtcMain);
        }
        #endregion

        #region [Công cụ]

        //Đổi giao diện
        private void beiUI_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                // Mở file App.config
                Configuration _conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

                //Sửa thuộc giá trị thuộc tính SkinName
                _conf.AppSettings.Settings["SkinName"].Value = beiUI.EditValue.ToString();
                //Lưu thay đổi
                _conf.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                ChangeSkin();

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            finally { }
            //Properties.Settings _set = new Properties.Settings();
        }

        //Đổi font
        private void bbiChangeFont_EditValueChanged(object sender, EventArgs e)
        {
            //Đổi font khi combox thay đổi value
            try
            {
                // Mở file App.config
                Configuration _conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

                //Sửa thuộc giá trị thuộc tính SkinName
                _conf.AppSettings.Settings["FontName"].Value = beiChangeFont.EditValue.ToString();
                //Lưu thay đổi
                _conf.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                //ChangeSkin();
                DevExpress.Utils.AppearanceObject.DefaultFont = new System.Drawing.Font(ConfigurationManager.AppSettings["FontName"], float.Parse(ConfigurationManager.AppSettings["FontSize"]));
                Application.EnableVisualStyles();

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            finally { }
        }

        //Đổi font-size
        private void beiFontSize_EditValueChanged(object sender, EventArgs e)
        {
            //Đổi font khi combox thay đổi value
            try
            {
                // Mở file App.config
                Configuration _conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

                //Sửa thuộc giá trị thuộc tính SkinName
                _conf.AppSettings.Settings["FontSize"].Value = beiFontSize.EditValue.ToString();
                //Lưu thay đổi
                _conf.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                //ChangeSkin();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            finally { }
        }

        //Giới thiệu
        private void bbiSysOverView_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item, new FrmIntroduction());
        }

        //Tổng sơ đồ tổ chức
        private void barButtonItem18_ItemClick_2(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Nội qui nhà trường
        private void barButtonItem27_ItemClick_1(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Bản đồ nhà trường
        private void barButtonItem28_ItemClick(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Gửi thông tin nội bộ
        private void bbiInfoTrans_ItemClick(object sender, ItemClickEventArgs e)
        {
            //////this.TabShowForm(e.Item, new UniMana.Client.FrmMain());
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Phiếu yêu cầu
        private void bbiFrmSoftware_RequestForm_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiFrmSoftware_RequestForm, new FrmSoftware_RequestForm());
        }
        #endregion

        #region [Đào tạo]

        #region [Sinh viên]
        //Hồ sơ sinh viên
        private void bbiStudent_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item, new FrmStudent());
        }

        //Lớp tuyển sinh
        private void bbtStudent_Class_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm((BarButtonItem)e.Item, new FrmStudent_Class_SubFilter(), true);
        }
        #endregion

        #region [Giảng viên]
        //Đăng ký lịch dạy
        private void bbiPersonnelRegistSubjectSession_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiPersonnelRegistSubjectSession, new FrmPersonnelRegistSession(), true);
        }

        //Đăng ký môn giảng
        private void bbiPersonnelRegistSubjectTerm_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiPersonnelRegistSubjectTerm, new FrmPersonnelRegistSubjectTerm());
        }

        //Theo dõi đánh giá buổi học
        private void barButtonItem5_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item, new FrmCheckSubjectClass_LecturerAll());
        }

        //Nhập điểm
        private void bbiScore1_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiScore, new FrmScore_SubFilterSubjectClass(), true);
        }
        #endregion

        //Môn học
        private void bbiSubject_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item, new FrmSubject());
        }

        //Chương trình khung
        private void bbiTrainingProgram_ItemClick_1(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiTrainingProgram,new FrmTrainingProgram());
        }

        //Phân công nhập điểm
        private void bbiScore_TaskInput_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiScore, new FrmSubjectClassCanInputScore());
        }

        //Danh mục chứng chỉ
        private void barButtonItem18_ItemClick_1(object sender, ItemClickEventArgs e)
        {
            //////this.TabShowForm(e.Item, new FrmCatalogueCertificate());
        }

        //Xét tốt nghiệp
        private void bbiConsiderGraduate_ItemClick(object sender, ItemClickEventArgs e)
        {
            //////this.TabShowForm(e.Item,new FrmConsiderGraduate());
            new FrmXuc_SubChooseRoom().ShowDialog();
        }

        //Xem thời khóa biểu
        private void bbiSchedule_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item, new FrmViewSchedule());
        }

        //Xếp thời khóa biểu
        private void bbiCreateScheduler_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiCreateScheduler, new FrmSchedule());
        }
        #endregion

        #region [Nhân sự]
        //Hồ sơ nhân viên
        private void bbiLecture_Profile_ItemClick(object sender, ItemClickEventArgs e)
        {
            TabShowFrm.ShowTabbedMdi(new FrmPersonelList(), xtcMain);
        }

        //Hợp đồng lao động
        private void barButtonItem24_ItemClick(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Bảo hiểm xã hội
        private void barButtonItem26_ItemClick_1(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }

        //Ký hiệu chấm công
        private void bbiCatalogueIdle_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiCatalogueIdle, new FrmCatalogueIdle(), true);
        }

        //Danh sách ngày làm việc theo hợp đồng lao động
        private void bbiContactWorkday_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiContactWorkday, new FrmContactWorkDays(), true);
        }

        //Phân công chấm công
        private void bbiAttendance_Devision_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiAttendance_Devision, new FrmAttendanceUserPermitsion());
        }

        //Chấm công
        private void bbiAttendance_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiAttendance, new FrmAttendance());
        }


        #endregion

        #region [Lãnh đạo]
        //Phân quyền xử lý qui chế học vụ
        private void bbiLeaderShip_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiLeaderShip, new Frm_Leadership());
        }


        //Loại điểm
        private void bbiScoreType_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiScoreType, new FrmScoreType());
        }

        //Lớp - Loại điểm (Loại điểm lớp học phần)
        private void bbiClass_ScoreType_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiClass_ScoreType, new FrmSubject_Class_ScoreType());
        }

        //Duyệt phiếu sửa điểm
        private void bbiScore2_EditScosorship_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiScore2_EditScosorship,new Frm_Score2_EditScoreCensorship(),true);
        }

        //Duyệt thêm sv vào lớp học phần
        private void bbiScore_AddStudentSubjectClassCensorship_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiScore_AddStudentSubjectClassCensorship, new FrmScore_AddStudentSubjectClassCensorship());
        }

        //Duyệt chuyển khóa/ngành
        private void bbiAcademicHandling_Transfer_Course_Censorship_ItemClick(object sender, ItemClickEventArgs e)
        {
            //this.TabShowForm(bbiAcademicHandling_Transfer_Course_Censorship, new Frm_AcademicHandling_Transfer_Course_Censorship(), true);
            Frm_Censorship censorshipMajor = new Frm_Censorship("ChuyenKhoaNganh");
            censorshipMajor.Text = "Duyệt chuyển khóa / chuyển ngành";
            try
            {
                foreach (XtraTabPage p in ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain.TabPages)
                {
                    if (p.Text == censorshipMajor.Text)
                    {
                        ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain.TabPages.Remove(p);
                        break;
                    }
                }
            }
            catch { }
            TabShowFrm.ShowTabbedMdi(censorshipMajor, ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain);
        }

        //Duyệt buộc thôi học
        private void barButtonItem26_ItemClick(object sender, ItemClickEventArgs e)
        {
            //this.TabShowForm(barButtonItem26, new FrmLog_ForceCanceled_Censorship_(), true);
            Frm_Censorship censorshipMajor = new Frm_Censorship("BuocThoiHoc");
            censorshipMajor.Text = "Duyệt buộc thôi học";
            try
            {
                foreach (XtraTabPage p in ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain.TabPages)
                {
                    if (p.Text == censorshipMajor.Text)
                    {
                        ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain.TabPages.Remove(p);
                        break;
                    }
                }
            }
            catch { }
            TabShowFrm.ShowTabbedMdi(censorshipMajor, ((FrmMain)Application.OpenForms["FrmMain"]).xtcMain);
        }

        //Duyệt xóa hồ sơ
        private void barButtonItem27_ItemClick(object sender, ItemClickEventArgs e)
        {
            //////FrmLog_RemoveProfile_Censorship f = new FrmLog_RemoveProfile_Censorship();
            //////this.findSetIcon(f, (BarButtonItem)e.Item);
            //////f.ShowDialog();
        }

        #region [Báo cáo & Thống kê]
        //Thống kê sinh viên
        private void bbiRptStudent_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiRptStudent, new FrmReport());
        }

        //Thống kê lớp
        private void bbiReportClass_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(bbiReportClass, new FrmReportClass_Class());
        }

        //Thống kê xếp loại học lực
        private void barButtonItem4_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.TabShowForm(e.Item,new FrmReportScoreMajor());
        }

        //Thống kê nhân sự
        private void bbiPersonel_ItemClick(object sender, ItemClickEventArgs e)
        {
            XtraMessageBox.Show("Chức năng đang xây dựng", "Nhóm phát triển");
        }
        #endregion

        //Đăng xuất
        FrmLogin f;
        private void bbiLogout1_ItemClick(object sender, ItemClickEventArgs e)
        {
            string strOldUser = SysGlobalVar.g_sta_sysUserLogin.Properties.UserName;
            f = new FrmLogin();
            SysGlobalVar.g_sta_boolLoginSuccess = false;
            f.txtxPassword.Text = "";
            f.txtxUserName.ReadOnly = true;
            f.ShowDialog();

            if (strOldUser == SysGlobalVar.g_sta_sysUserLogin.Properties.UserName)
            {
                bsiUser.Caption = "Người dùng : " + SysGlobalVar.g_sta_sysUserLogin.Properties.UserName;
                this.ChangeSkin();
                SysUtils.SetRuleControl(this.Controls, this.Name);
            }
            else
            {

                int n = this.xtcMain.TabPages.Count - 1;
                while (n >= 0)
                {
                    if (this.xtcMain.TabPages[n].Text != "Tổng quan hệ thống" && this.xtcMain.TabPages[n].Text != "Liên hệ trực tuyến")
                    {
                        if (this.xtcMain.TabPages[n].Controls.Count > 0)
                        {

                            if (this.xtcMain.TabPages[n].Controls[0] is XtraForm)
                                ((XtraForm)this.xtcMain.TabPages[n].Controls[0]).Close();
                            xtcMain.TabPages.Remove(this.xtcMain.TabPages[n]);
                        }
                    }

                    n--;
                }

                bsiUser.Caption = "Người dùng : " + SysGlobalVar.g_sta_sysUserLogin.Properties.UserName;
                this.ChangeSkin();
                SysUtils.SetRuleControl(this.Controls, this.Name);
            }
        }
        #endregion
    }
}
